زمانی که یک program unit(
فانکشن، پکیج،
پروسیجر) به صورت invoker right ایجاد می شود، کاربر صدا زننده برنامه، با
مجوز خودش این برنامه را اجرا خواهد کرد بنابرین اگر جدولی در برنامه موجود باشد که این کاربر به آن دسترسی نداشته باشد، کارش با خطا متوقف خواهد شد(بررسی Invoker’s Rights و Definer’s Rights). برای مثال، تابع زیر را در نظر بگیرید:
SQL> CREATE FUNCTION sys.Tabe(name_malek in varchar2,name_jadval in varchar2) RETURN VARCHAR2 AUTHID CURRENT_USER
AS
V_bytes varchar2(1000);
BEGIN select bytes into V_bytes from dba_segments where owner=name_malek and segment_name=name_jadval; RETURN V_bytes;
END;
/
Function created.
این تابع که با یوزر sys ایجاد شده، قرار است نام segment را دریافت و حجم آن را بر اساس بایت برگرداند. عبارت AUTHID CURRENT_USER بیانگر invoker right است.
کاربری با نام vahid را با حداقل دسترسی ایجاد کرده و بررسی می کنیم که آیا این کاربر می تواند تابع فوق را اجرا کند؟
SQL> create user vahid identified by a;
User created.
SQL> grant create session to vahid;
Grant succeeded.
بدیهی است که اگر کاربری بخواهد تابع کاربر دیگر را اجرا کند، باید مجوز اجرای آن تابع را داشته باشد:
SQL> grant execute on sys.tabe to vahid;
Grant succeeded.
با این شرایط، آیا کاربر vahid می تواند تابع sys.tabe را اجرا کند؟
SQL> conn vahid/a
Connected.
SQL> select sys.tabe('SYS','JADVAL1') from dual;
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "SYS.TABE", line 7
همانطور که می بینید، کاربر vahid با توجه به آنکه به ویوی dba_segments دسترسی ندا تالار های تخصصی...
ما را در سایت تالار های تخصصی دنبال می کنید
برچسب : نویسنده : خنجی niksaleh بازدید : 78 تاريخ : پنجشنبه 25 اسفند 1401 ساعت: 22:11